package com.such.kit.el.support;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @作者 SUCH
 * @日期 2018-3-27 上午9:52:03
 * @描述 EL 函数注册注解
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD})
@Inherited
@Documented
public @interface ELFunction {

	public static final String NAMESPACE_SEPARATE = "$";

	/**
	 * <p>方法名：namespace</p>
	 * <p>
	 * 描述：指定命名空间<br>
	 * 指定命名空间后使用函数需要添加命名空间作前缀，可是 [namespace][NAMESPACE_SEPARATE][name]
	 * </p>
	 * @return 命名空间
	 */
	public String namespace() default "";

	/**
	 * <p>方法名：type</p>
	 * <p>描述：指定函数类型</p>
	 * @return 函数类型
	 */
	public String type() default "";

	/**
	 * <p>方法名：name</p>
	 * <p>描述：指定函数名称</p>
	 * @return 函数名称
	 */
	public String name() default "";

	/**
	 * <p>方法名：descr</p>
	 * <p>描述：对函数进行备注说明</p>
	 * @return 备注说明
	 */
	public String descr() default "";

	/**
	 * <p>方法名：usage</p>
	 * <p>描述：函数使用模板</p>
	 * @return 使用模板
	 */
	public String usage() default "";

	/**
	 * <p>方法名：scopes</p>
	 * <p>描述：适用表达式的范围</p>
	 * @return 适用范围
	 */
	public String[] scopes() default "";

	/**
	 * <p>方法名：priority</p>
	 * <p>描述：函数嵌套优先级，越不会嵌套其它函数，优先级越低</p>
	 * @return 优先级
	 */
	public int priority() default 1;

}
